package com.guigu.www.service.imp;



import com.guigu.www.mapper.*;
import com.guigu.www.pojo.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.SimpleDateFormat;
import java.util.Date;

@Service
public class IdUtils {
    @Autowired
    FileMapper fileMapper;
    @Autowired
    private CellMapper cellMapper;
    @Autowired
    private GatherMapper gatherMapper;
    @Autowired
    private PayMapper payMapper;
    @Autowired
    private ModuleMapper moduleMapper;

    @Autowired
    private MDesignProcedureMapper mDesignProcedureMapper;
    @Autowired
    private ApplyMapper applyMapper;
    @Autowired
    private MManufactureMapper mManufactureMapper;
    @Autowired
    private PayDetailsMapper payDetailsMapper;
    //获取产品编号
    public  String getPRODUCT_ID(File file){//传一个新增操作的产品档案对象
        String liushui = fileMapper.liushuiId();//查询数据库上次添加的产品编号
        Date date = new Date();//定义当前时间
        int proid=Integer.parseInt(liushui.substring(liushui.length()-6));//获取6位流水号
        int proid2=(proid+1);//对流水号+1
        proid=proid2;
        int n = 0;//初始化流水号位数
        String wei ="";//定义流水号
        while (proid!=0){//循环取余数
            n++;//循环一次数字位数+1
            proid=proid/10;
        }

        if (n!=6){//如果上次产品编号不是6位数 否则直接赋值
            for(int i = 0;i<(6-n);i++){//循环在新增的流水号上+0
                wei=wei+"0";
            }
            wei=wei+proid2;//对流水号赋值
        }else{
                wei=""+proid2;
        }
        if((file.getRegistertime().getMonth()==0?12:file.getRegistertime().getMonth())>(date.getMonth()+1)){
            //如果数据库中最后一个生成产品档案建档时间大于当前新增的时间 流水号重新从1开始计算
            proid2=1;
            wei="00000"+proid2;
        }
        //返回新增需要的产品编号   //拼入1-3类编号 和计算出的流水号
        return "100"+file.getFirstkindid()+""+file.getFirstkindid()+""+file.getFirstkindid()+wei;
    }
    static SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMdd");
    //获取库存编号
    public String getid5(Cell cell){//传一个新增操作的库存对象
        //String designId = cellMapper.QueryMaxSerialNumber();//数据库查询最后一个库存编号
        //获取上一个流水号
        Date date = new Date();
        Cell cell1 = cellMapper.QueryMaxSerialNumber();
        if(cell1==null){
            return "400202211280001";
        }
        //获取4位流水号
        int proid=Integer.parseInt(cell1.getStoreId().substring(cell1.getStoreId().length()-4));
        int proid2=(proid+1);//对流水号+1
        proid=proid2;
        int n = 0;//初始化流水号位数
        String wei ="";//定义流水号
        while (proid!=0){//循环取余数
            n++;//循环一次数字位数+1
            proid=proid/10;
        }
        if (n!=4){//如果上次产品编号不是4位数 否则直接赋值
            for(int i = 0;i<(4-n);i++){//循环在新增的流水号上+0
                wei=wei+"0";
            }
            wei=wei+proid2;//对流水号赋值
        }else{
            wei=""+proid2;
        }
        if((cell1.getRegisterTime().getMonth()==0?12:date.getMonth())>(date.getMonth()+1)){
            proid2=1;
            wei="000"+proid2;
        }
        String dateStr = simpleDateFormat.format(date);
        return "400"+dateStr+wei;
    }
    //获取物料设计单编号
  public String getDesignDesignid(Module module){//传一个新增操作的物料设计对象
        //获取上一个流水号
      Module module1=moduleMapper.QueryMaxSerialNumber();//数据库查询最后一个物料设计的物料设计单编号
      Date date = new Date();
      if(module1==null){
          //第一次设置
          return "200"+date.getYear()+1900+date.getMonth()+1+date.getDate()+"0001";
      }

        int proid=Integer.parseInt(module1.getDesignid().substring(module1.getDesignid().length()-4));//获取4位流水号
        int proid2=(proid+1);//对流水号+1
        proid=proid2;
        int n = 0;//初始化流水号位数
        String wei ="";//定义流水号
        while (proid!=0){//循环取余数
            n++;//循环一次数字位数+1
            proid=proid/10;
        }
        if (n!=4){//如果上次产品编号不是4位数 否则直接赋值
            for(int i = 0;i<(4-n);i++){//循环在新增的流水号上+0
                wei=wei+"0";
            }
            wei=wei+proid2;//对流水号赋值
        }else{
            wei=""+proid2;
        }
        if((module.getRegistertime().getMonth()==0?12:module.getRegistertime().getMonth())>(date.getMonth()+1)){
            //如果数据库中最后一个生成物料设计单登记时间大于当前新增的时间 流水号重新从1开始计算
            proid2=1;
            wei="000"+proid2;
        }
        String dateStr = simpleDateFormat.format(date);
        return "200"+dateStr+wei;
    }

    //获取入库单编号
    public String getid6(Gather gather){//传一个新增操作的入库单对象
        Gather gather1 = gatherMapper.QueryGatherSerialNumber();//数据库查询最后一个入库单编号
        Date date = new Date();
        if(gather1==null){
            return "401202211150001";
        }
        int proid=Integer.parseInt(gather1.getGatherId().substring(gather1.getGatherId().length()-4));//获取4位流水号
        int proid2=(proid+1);//对流水号+1
        proid=proid2;
        int n = 0;//初始化流水号位数
        String wei ="";//定义流水号
        while (proid!=0){//循环取余数
            n++;//循环一次数字位数+1
            proid=proid/10;
        }
        if (n!=4){//如果上次产品编号不是4位数 否则直接赋值
            for(int i = 0;i<(4-n);i++){//循环在新增的流水号上+0
                wei=wei+"0";
            }
            wei=wei+proid2;//对流水号赋值
        }else{
            wei=""+proid2;
        }
        if((gather.getRegisterTime().getMonth()==0?12:gather.getRegisterTime().getMonth())>(date.getMonth()+1)){
            proid2=1;
            wei="000"+proid2;
        }
        String dateStr = simpleDateFormat.format(date);
        return "401"+dateStr+wei;
    }

    //获取出库单编号
    public  String getid7(Pay pay){//传一个新增操作的出库单对象
        String designId = payMapper.Liushui();//数据库查询最后一个出库单编号
        Date date = new Date();
        if(designId==null){
            return "401202211110001";
        }
        int proid=Integer.parseInt(designId.substring(designId.length()-4));//获取4位流水号
        int proid2=(proid+1);//对流水号+1
        proid=proid2;
        int n = 0;//初始化流水号位数
        String wei ="";//定义流水号
        while (proid!=0){//循环取余数
            n++;//循环一次数字位数+1
            proid=proid/10;
        }
        if (n!=4){//如果上次产品编号不是4位数 否则直接赋值
            for(int i = 0;i<(4-n);i++){//循环在新增的流水号上+0
                wei=wei+"0";
            }
            wei=wei+proid2;//对流水号赋值
        }else{
            wei=""+proid2;
        }
        if((pay.getRegisterTime().getMonth()==0?12:pay.getRegisterTime().getMonth())>(date.getMonth()+1)){
            proid2=1;
            wei="000"+proid2;
        }
        String dateStr = simpleDateFormat.format(date);
        return "402"+dateStr+wei;
    }


    //获取工序设计单编号
    public  String getid2(DesignProcedure designProcedure){//传一个新增操作的生产计划对象
        String designId = mDesignProcedureMapper.getLiushui();//数据库查询最后一个生产计划编号
        if(designId==null){
            return  "300202211180001";
        }
        Date date = new Date();
        int proid=Integer.parseInt(designId.substring(designId.length()-4));//获取4位流水号
        int proid2=(proid+1);//对流水号+1
        proid=proid2;
        int n = 0;//初始化流水号位数
        String wei ="";//定义流水号
        while (proid!=0){//循环取余数
            n++;//循环一次数字位数+1
            proid=proid/10;
        }
        if (n!=4){//如果上次产品编号不是4位数 否则直接赋值
            for(int i = 0;i<(4-n);i++){//循环在新增的流水号上+0
                wei=wei+"0";
            }
            wei=wei+proid2;//对流水号赋值
        }else{
            wei=""+proid2;
        }
        if((designProcedure.getRegistertime().getMonth()==0?12:designProcedure.getRegistertime().getMonth())>(date.getMonth()+1)){
            proid2=1;
            wei="000"+proid2;
        }
        String dateStr = simpleDateFormat.format(date);
        return "300"+dateStr+wei;
    }

    //获取生产计划编号
    public  String getid3(Apply apply){//传一个新增操作的生产计划对象
        String applyId = applyMapper.getLiushuiapply();//数据库查询最后一个生产计划编号
        if(applyId==null){
            return  "201202211180001";
        }
        Date date = new Date();
        int proid=Integer.parseInt(applyId.substring(applyId.length()-4));//获取4位流水号
        int proid2=(proid+1);//对流水号+1
        proid=proid2;
        int n = 0;//初始化流水号位数
        String wei ="";//定义流水号
        while (proid!=0){//循环取余数
            n++;//循环一次数字位数+1
            proid=proid/10;
        }
        if (n!=4){//如果上次产品编号不是4位数 否则直接赋值
            for(int i = 0;i<(4-n);i++){//循环在新增的流水号上+0
                wei=wei+"0";
            }
            wei=wei+proid2;//对流水号赋值
        }else{
            wei=""+proid2;
        }
        if((apply.getRegistertime().getMonth()==0?12:apply.getRegistertime().getMonth())>(date.getMonth()+1)){
            proid2=1;
            wei="000"+proid2;
        }
        String dateStr = simpleDateFormat.format(date);
        return "201"+dateStr+wei;
    }


    //派工单编号
    public  String getid4(MManufacture mManufacture){//传一个新增操作的生产计划对象
        String applyId = mManufactureMapper.getLiushuiManufacture();//数据库查询最后一个生产计划编号
        if(applyId==null){
            return  "301202211180001";
        }
        Date date = new Date();
        int proid=Integer.parseInt(applyId.substring(applyId.length()-4));//获取4位流水号
        int proid2=(proid+1);//对流水号+1
        proid=proid2;
        int n = 0;//初始化流水号位数
        String wei ="";//定义流水号
        while (proid!=0){//循环取余数
            n++;//循环一次数字位数+1
            proid=proid/10;
        }
        if (n!=4){//如果上次产品编号不是4位数 否则直接赋值
            for(int i = 0;i<(4-n);i++){//循环在新增的流水号上+0
                wei=wei+"0";
            }
            wei=wei+proid2;//对流水号赋值
        }else{
            wei=""+proid2;
        }
        if((mManufacture.getRegisterTime().getMonth()==0?12:mManufacture.getRegisterTime().getMonth())>(date.getMonth()+1)){
            proid2=1;
            wei="000"+proid2;
        }
        String dateStr = simpleDateFormat.format(date);
        return "301"+dateStr+wei;
    }


}
